package com.demo.socket.tcp;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

/**
 * @author wangning
 * @date 2023/10/31 11:52
 */
public class TcpClient {
    public Socket socket = null;

    // 定义一个构造方法  给出要连接的端口号 , 和 IP地址
    public TcpClient(int port, String ServerIp) throws IOException {
        // 重点注意 : 这个操作相当于让客户端和服务器建立TCP连接
        // 这里如果连接上了 , 服务器的 accept 就会返回
        socket = new Socket(ServerIp, port);
    }

    public void start() {
        Scanner input = new Scanner(System.in);
        try (InputStream inputStream = socket.getInputStream();
             OutputStream outputStream = socket.getOutputStream()) {
            // 使用Scanner 和 PrintWrite 来对字节流进行输入和输出
            Scanner scannerFromSocket = new Scanner(inputStream);
            PrintWriter printWriter = new PrintWriter(outputStream);
            while (true) {
                System.out.println("---->  ");
                // 1. 得到请求
                String request = input.nextLine();
                // 2 把读取到的内容构造成请求 , 发送给服务器
                //   注意, 由于我们之前约定好 , 每个请求之间是由\n 来区分
                //   使用printWriter 的 println 就会自动带上换行
                printWriter.println(request);
                // 刷新缓冲区
                printWriter.flush();
                // 3. 读取响应
                // 通过scannerFromSocket
                String response = scannerFromSocket.nextLine();
                // 4. 把响应结果显示到控制台上
                System.out.printf("req : %s , resp : %s \n", request, response);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    public static void main(String[] args) throws IOException {
        TcpClient tcpEchoClient = new TcpClient(9090, "127.0.0.1");
        tcpEchoClient.start();
    }
}
